Hibernate Validator হলো JSR-303 এবং JSR-380 স্পেসিফিকেশন অনুসারে একটি কনস্ট্রেইন্ট অ্যানোটেশন লাইব্রেরি, যা JPA (Java Persistence API) এ ভ্যালিডেশন প্রয়োগ করতে সাহায্য করে। এটি ডেটা ইনপুটের উপর বৈধতা চেক করার জন্য ব্যবহৃত হয়, যেমন নামের আকার, ইমেল ঠিকানা, অথবা কোনো ক্ষেত্র খালি না হওয়া ইত্যাদি। Hibernate Validator সাধারণত অ্যানোটেশন ভিত্তিক ভ্যালিডেশন মেথডগুলো সরবরাহ করে, যা সহজে ক্লাসে প্রয়োগ করা যায়।
Hibernate Validator Annotations:
Hibernate Validator @NotNull, @Size, @Email, এবং Custom Validation এর মতো অ্যানোটেশন ব্যবহার করে ইনপুট ডেটা যাচাই করা যায়।
1. @NotNull
@NotNull অ্যানোটেশনটি ব্যবহার করে কোনো ক্ষেত্রের মান null হতে পারবেনা, অর্থাৎ এটি একটি বাধ্যতামূলক ফিল্ড তৈরি করে।
Usage of @NotNull:
import javax.validation.constraints.NotNull;
public class User {
@NotNull(message = "Username cannot be null")
private String username;
// Getters and Setters
}
এখানে, @NotNull ব্যবহার করা হয়েছে username ফিল্ডে, যাতে এই ফিল্ডের মান null না হয়। যদি username ফিল্ডের মান null হয়, তাহলে এটি একটি ভ্যালিডেশন এরর তৈরি করবে।
2. @Size
@Size অ্যানোটেশনটি একটি ফিল্ডের স্ট্রিং বা коллекশনের আকার যাচাই করতে ব্যবহৃত হয়। এটি ডেটার মিনিমাম এবং ম্যাক্সিমাম আকার নির্ধারণ করতে সহায়তা করে।
Usage of @Size:
import javax.validation.constraints.Size;
public class User {
@Size(min = 3, max = 20, message = "Username must be between 3 and 20 characters")
private String username;
// Getters and Setters
}
এখানে, @Size অ্যানোটেশনটি username ফিল্ডের জন্য প্রযোজ্য। এটি নিশ্চিত করে যে username ফিল্ডের আকার ৩ থেকে ২০ ক্যারেক্টারের মধ্যে হতে হবে। যদি এর মান ৩ এর কম বা ২০ এর বেশি হয়, তাহলে এটি একটি ভ্যালিডেশন এরর তৈরি করবে।
3. @Email
@Email অ্যানোটেশনটি একটি বৈধ ইমেল ঠিকানা যাচাই করার জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে একটি ফিল্ডে যে ডেটা রয়েছে তা একটি সঠিক ইমেল ফরম্যাটে আছে।
Usage of @Email:
import javax.validation.constraints.Email;
public class User {
@Email(message = "Please provide a valid email address")
private String email;
// Getters and Setters
}
এখানে, @Email অ্যানোটেশনটি email ফিল্ডে ব্যবহার করা হয়েছে। এটি নিশ্চিত করে যে, email ফিল্ডের মান একটি বৈধ ইমেল ঠিকানা, যেমন user@example.com।
4. Custom Validation
Hibernate Validator এর সাহায্যে আপনি custom validation তৈরি করতে পারেন, যেখানে একটি নিজস্ব কনস্ট্রেইন্ট অ্যানোটেশন এবং কাস্টম ভ্যালিডেটর ক্লাস তৈরি করতে হবে। এটি খুবই উপকারী যখন পূর্বনির্ধারিত অ্যানোটেশনগুলির বাইরে কিছু ভ্যালিডেশন প্রয়োজন হয়।
Step 1: Create a Custom Annotation
প্রথমে একটি কাস্টম অ্যানোটেশন তৈরি করতে হবে যা আপনার কাস্টম ভ্যালিডেশন ব্যবহার করবে।
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// Define the annotation
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class) // Reference to the custom validator
public @interface ValidPhoneNumber {
String message() default "Invalid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
এখানে, @ValidPhoneNumber একটি কাস্টম অ্যানোটেশন যা PhoneNumberValidator নামক কাস্টম ভ্যালিডেটর দ্বারা যাচাই হবে।
Step 2: Create the Custom Validator
এখন, আপনি একটি কাস্টম ভ্যালিডেটর ক্লাস তৈরি করবেন যা অ্যানোটেশন দ্বারা নির্ধারিত ফিল্ডের মান যাচাই করবে।
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PhoneNumberValidator implements ConstraintValidator<ValidPhoneNumber, String> {
@Override
public void initialize(ValidPhoneNumber constraintAnnotation) {
// No initialization required
}
@Override
public boolean isValid(String phoneNumber, ConstraintValidatorContext context) {
if (phoneNumber == null) {
return false; // Phone number cannot be null
}
// Check if phone number matches a basic pattern (simple example)
return phoneNumber.matches("^\\+?[0-9]*$"); // Validates phone numbers with digits and optional "+" sign
}
}
এখানে, PhoneNumberValidator ক্লাসে isValid() মেথডে একটি সিম্পল প্যাটার্ন মেচিং দিয়ে ফোন নাম্বারের বৈধতা যাচাই করা হয়েছে।
Step 3: Use the Custom Annotation
এখন, আপনি আপনার Entity ক্লাসে এই কাস্টম ভ্যালিডেশন অ্যানোটেশন ব্যবহার করতে পারেন।
import javax.validation.constraints.NotNull;
public class User {
@NotNull(message = "Phone number cannot be null")
@ValidPhoneNumber(message = "Invalid phone number format")
private String phoneNumber;
// Getters and Setters
}
এখানে, @ValidPhoneNumber অ্যানোটেশনটি phoneNumber ফিল্ডে ব্যবহৃত হয়েছে এবং এটি কাস্টম ভ্যালিডেটর PhoneNumberValidator দ্বারা যাচাই করা হবে।
Step 4: Validate the Entity Using Validator
Hibernate Validator ব্যবহার করার জন্য আপনি ValidatorFactory এবং Validator ব্যবহার করবেন, যা আপনার Entity ক্লাসের ইনপুট ভ্যালিডেশন করবে।
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class ValidationTest {
public static void main(String[] args) {
// Create a validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Create a User object with invalid phone number
User user = new User();
user.setPhoneNumber("123ABC");
// Validate the user object
Set<ConstraintViolation<User>> violations = validator.validate(user);
// Print any validation errors
for (ConstraintViolation<User> violation : violations) {
System.out.println(violation.getMessage());
}
}
}
এখানে, user.setPhoneNumber("123ABC") দ্বারা একটি অবৈধ ফোন নাম্বার সেট করা হয়েছে, এবং validator.validate(user) এর মাধ্যমে সেই অবজেক্টটির ভ্যালিডেশন করা হচ্ছে। যদি কোনো ত্রুটি থাকে, তবে তা কনসোলে দেখানো হবে।
Hibernate Validator ব্যবহার করে আপনি @NotNull, @Size, @Email, এবং Custom Validation এর মতো অ্যানোটেশন দ্বারা ইনপুট ডেটার বৈধতা চেক করতে পারেন।
@NotNullচেক করে যে ফিল্ডটি null নয়।@Sizeনিশ্চিত করে যে স্ট্রিং বা কালেকশনের আকার নির্দিষ্ট সীমার মধ্যে রয়েছে।@Emailইমেল ফরম্যাট সঠিক কিনা যাচাই করে।- Custom Validation আপনাকে নিজের অ্যানোটেশন এবং কাস্টম ভ্যালিডেটর তৈরি করতে সহায়তা করে যা বিশেষ ধরনের ভ্যালিডেশন প্রয়োগ করতে পারে।
Hibernate Validator আপনার জাভা অ্যাপ্লিকেশনগুলির ইনপুট ডেটা যাচাই করার জন্য একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে।
Read more